package chapter06

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test02_anon
 * Package: chapter06
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-25
 *          Time: 20:02
 */

object Test02_anon {
  def main(args: Array[String]): Unit = {
    //匿名函数
    val fun = (name:String) => {
      println(name)
    }
    //匿名函数的标准写法 (a:Int) => {函数体} 创建的时候不能省略
    //简写 是 函数作为参数传递的时候

    //定义一个函数 函数参数是fun函数 String=>Unit 是fun的函数类型
    //传一个这样函数类型的函数 作为func函数的参数
    def func(fun:String=>Unit):Unit= {
      fun("嵌套调用")
    }

    func(fun)

    //不关注函数的名称 直接传一个函数的本体 就是匿名函数
    func((name:String) => println(name))
    //传递匿名函数的至简原则
    //1.参数类型可以省略 可以自动推导
    func((name) => {println(name)})
    //2.省略参数 只有一个参数 括号可以省略 没有参数 和 大于一个参数 都不能省略
    func(name => {println(name)})
    //3.匿名函数 如果只有一行 花括号可以省略
    func(name => println(name))
    //4.如果参数只出现一次那么可以使用下划线代替 => 也没有了
    func(println(_))
    //5.如果推断出当前是一个函数体 println 而不是语句 下划线也可以省略
    func(println)




  }

}
